﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SortirovkaPiramidoi
{
    class Program
    {

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("введите массив для сортировки методом Пирамиды");
                String str = Console.ReadLine();
                String[] mas_str = str.Split(' ');
                Double[] mas = new Double[mas_str.Length];
                for (Int32 i = 0; i < mas_str.Length; i++)
                {
                    mas[i] = Double.Parse(mas_str[i]);
                }

                Root root = new Root(mas[0]);
                for (Int32 i = 1; i < mas.Length; i++)
                {
                    Sortirovka(root, mas[i]);
                }
                Double[] new_mas = new Double[mas.Length];
                Int32 nomer = 0;

                VivodNaPechat(root, ref new_mas, ref nomer);

                Console.WriteLine("ввывод отсортированного массива:");
                foreach (Double i in new_mas)
                {
                    Console.Write(" {0:#.##}", i);
                }
                Console.ReadLine();
            }
            catch
            {
                Console.WriteLine("введен неверный формат массива");
                Console.ReadLine();
            }
        }

        public static void VivodNaPechat(Root root, ref Double [] new_mas, ref Int32 nomer)
        {
            if (root != null)
            {
            //    Console.WriteLine(root.znach);
                if (root.left != null)
                {
                    VivodNaPechat(root.left, ref new_mas, ref nomer);
                    new_mas[nomer] = root.znach;
                    nomer++;
                }
                else
                {
                    new_mas[nomer] = root.znach;
                    nomer++;
                }
                if (root.right != null)
                {
                    VivodNaPechat(root.right, ref new_mas, ref nomer);
                }
                else
                {
                    return;
                }
            }
        }

        public static void Sortirovka(Root root, Double mas_i)
        {
            if (mas_i > root.znach)
            {
                if (root.right == null) root.right = new Root(mas_i);
                else
                {
                    Sortirovka(root.right, mas_i);
                    return;
                }
            }
            else
            {
                if (root.left == null) root.left = new Root(mas_i);
                else
                {
                    Sortirovka(root.left, mas_i);
                    return;
                }
            }
        }
    }

    class Root
    {
        public Double znach;
        public Root left;
        public Root right;

        public Root(Double value)
        {
            znach = value;
            left = null;
            right = null;
        }

    }
}
